package com.maochang.d08_springboot_ssmp.config;


import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

//
//extends WebMvcConfigurationSupport
@Slf4j
@Configuration
public class WebMvcConfig implements  WebMvcConfigurer{

    /**
     * 1、设置静态资源映射
     * springboot源码默认开放的静态资源目录为：classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
     * 正产开发中我们通常会把静态资源放到static目录下，所以我们需要配置一下静态资源映射
     * 但是总有一些奇怪的项目，他们喜欢把静态资源目录乱放,所以要不我们通过，在配置文件中的方式改静态资源目录，要不我们通过重写addResourceHandlers方法来配置静态资源映射
     *
     * 2、关于前端的 / 和 后端 /的问题
     *  1、前端的杠解析出来就是 http://ip:port/
     *  2、后端杠解析 http://ip:port/工程路径
     *
     * 3、关于如果访问后端的静态文件
     *  通常我们需要再前端的thymeleaf 模版中配置base标签 让所有的地址就是相对于这个base标签进行拼接
     *  <base th:href="${#httpServletRequest.getScheme() + '://' + #httpServletRequest.getServerName() + ':' + #httpServletRequest.getServerPort()}"><base/>
     *  你不写/的情况下 如下写法ajax请求写法
     *  $.ajax({ url: 'user/captcha',
     *      他会变成  http://ip:port/user/captcha
     *  同理静态资源也是如此，如下
     *  <img src="admin/images/captcha.gif" class="codeImage"  id="captcha"/>
     *      他会变成  http://ip:port/admin/images/captcha.gif
     * @param registry
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        //利用映射的方式配置静态资源 ---类似于转发了下请求
        registry.addResourceHandler("/yxstatic/**").addResourceLocations("classpath:/house/images/");
    }

    /**
     * 3、配置默认的视图访问路径，你访问到 http://localhost:8089/  跳转到的首页，通常这个会配置项目的登录页，我们演示的情况下配置的就是首页
     * @param registry
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // 这个books会被我们配置的 thymeleaf 视图解析器解析，解析成 /pages/books.html，为什么因为我在配置文件里写了前缀后缀
        //   thymeleaf:
        //    prefix: classpath:/static/pages/
        //    suffix: .html
        registry.addViewController("/").setViewName("books");
    }
}
